#include <iostream>
#include <vector>
#include <algorithm>
// 需要指定g++ -std=c++20
namespace rg = std::ranges;
using namespace std;

int main()
{
    std::vector a{4, 1, 6, 2};
    // 1、指代范围的迭代器对传入，从前往后
    // begin 和 end 中间“夹”着的元素序列就是它们所指代的范围
    rg::sort(a.begin(), a.end()); // 等价于 rg::sort(a);
    for (auto i : a)
    {
        cout << i << endl;
    }
    cout << "------------------" << endl;

    // 2、rbegin -> rend 从后往前
    // rbegin rend 所指代的范围也是容器内的全体元素，但遍历的方向是从尾到头
    rg::sort(a.rbegin(), a.rend());
    for (auto i : a)
    {
        cout << i << endl;
    }
    cout << "------------------" << endl;

    // 3、只对 a[0] ~ a[3] 排序
    // 此时排序的是全体 10 个元素。如果想要对前 4 个元素排序，则必须传入对应的首尾迭代器
    int arr[10]{4, 1, 6, 2};
    // rg::sort(first, last)必须构成一个前向可遍历的区间，即 first 必须可递增地到达 last
    rg::sort(&arr[0], &arr[4]);

    for (auto i : arr)
    {
        cout << i << endl;
    }
    return 0;
}
